import { FactoryTaskHelper } from "GameLoop/WorldState/EntityManager/Entitys/room/factory/FactoryTaskHelper";
import { BinaryDecision } from "framework/FSM/DecisionTree/Decision";
 
/**
 * 工厂的剩余空间足够
*/
export class DecisionIsFactoryStoreSpaceReady <T extends IStateArg<Room>> extends BinaryDecision<T>
{


    public testValue(arg:T): boolean
    {
         
        const toptask = arg.entity.getTaskByType("factory")[0]?.data ;
        
        const core = arg.entity.getEntity("CoreEntity");
        // 1.工厂的剩余空间是否能够放得下我要的资源。
        // 1.a放得下则空间足够
        // 1.b 放不下
        //      2.工厂是否存在我不要的生产原料
        //          2.a 存在 放不下
        //          2.b 放得下
        if(toptask && core.Factory)
        {
            const topproduce = FactoryTaskHelper.Top(toptask.arg);
            if(topproduce)
            {
                const subresource = FactoryTaskHelper.CalAllSubResourceAmount(topproduce.target,topproduce.amount);
                const childspace = _.sum(Object.values(subresource));
               if(core.Factory.store.getFreeCapacity()>= Math.max(childspace,topproduce.amount))
               {
                    // 所有的反应物都可以放下 1.a
                    return true;
               }
               else
               {
                    for(let ext_res in core.Factory.store)
                    {
                        if(!subresource[ext_res as FactoryResourceType])
                        {
                            // 存在我不需要的底物
                            return false;
                        }
                    }
                    return true;
               }
                // return true
            }
            else
            {
                // 没有生产目标
                throw new Error(`${arg.entity.GUID} 生产列表为空`);
            }
            //

        }
        else
        {
            throw new Error(`${arg.entity.GUID} topreactiontask is null`);
        }
        // return false
    }


}

